package main.labone;

import  static java.lang.Math.sqrt;

/**
 * Created with IntelliJ IDEA.
 * User: Борис
 * Date: 08.10.13
 * Time: 23:01
 * To change this template use File | Settings | File Templates.
 */
public class MainLabClass {
    public static void main(String[] args){
//        double matrixOfSystem[][] = {
//                {            1,      1/sqrt(2),  1/sqrt(2),                     0, 0.14},
//                {       7.0/12,          4.0/5,     -1.0/3,                 1.0/2, 0.33},
//                {        2.0/3,      sqrt(2)/3,     -1.0/3,            -1/sqrt(3),-0.08},
//                {(1+sqrt(2))/2,  (2+sqrt(2))/4,          0,  -sqrt(3)/(2*sqrt(2)), 0.04}
//        };

//======================================================================================================================
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("Введите число строк в матрице системы");
//        int a, sizeString = scanner.nextInt();
//        double[][] matrixOfSystem = new double[sizeString][sizeString+1];
//        for(int i = 0; i<sizeString; i++){
//            a = i + 1;
//            System.out.println("Введите "+a+"-ю строку расширинной матрицы системы");
//            for(int j = 0; j<sizeString+1; j++){
//                matrixOfSystem[i][j] = scanner.nextDouble();
//            }
//        }
//====================контрольный пример================================================================================
//        double matrixOfSystem[][] = {
//                { 1, -3, 5, -6,-60},
//                { 2,-11,-9, 10, 11},
//                {-8, 13, 7,-12, -1},
//                { 7,  3,-2,  6, 53}
//        };
//        LabOne obj = new LabOne(matrixOfSystem);
//        System.out.println("Расширинная матрица системы");
//
//        obj.showMatrix("matrixOfSystemEx");
//
//        System.out.println("Решение");
//        obj.calculate();
//        System.out.println();
//        System.out.println("Матрица системы");
//
//        obj.showMatrix("matrixOfSystem");
//
//        System.out.println("\nСтолбец свободных членов");
//
//        obj.showMatrix("B");
//
//        obj.determinantMatrixOfSystem();
//        System.out.print("\nОпределитель матрицы системы равен "+obj.getDetMatrixOfSystem()+"\n");
//        System.out.print("\nМатрица, обратная к матрице системы");
//        obj.inverseMatrix();
//
//        obj.showMatrix("inverseMatrix");
//
//        System.out.println("Ответ");
//
//        obj.showMatrix("answer");
//
//        System.out.println();
//        System.out.println("Проверка");
//        obj.check();
//
//        obj.showMatrix("B1");
//
//
//        double x = sqrt(2);
//        System.out.println(x);
//        System.out.println(obj.round(x,6));
//======================================================================================================================
        for(int i = 1; i<4; i++){
            System.out.println("==========================================================================================");
            System.out.println(i + " цифра после запятой");
            double a = LabOne.round(sqrt(2),i);
            double b = LabOne.round(sqrt(3),i);
            System.out.println("a = "+a+" b = "+b);
            double matrixOfSystem[][] = {
                    {      1,   1.0/a,  1.0/a,       0, 0.14},
                    { 7.0/12,   4.0/5, -1.0/3,   1.0/2, 0.33},
                    {  2.0/3,     a/3, -1.0/3,  -1.0/b,-0.08},
                    {(1+a)/2, (2+a)/4,      0,-b/(2*a), 0.04}
            };
            LabOne obj = new LabOne(matrixOfSystem);
            System.out.println("Расширинная матрица системы");

            obj.showMatrix("matrixOfSystemEx");

            System.out.println("Решение");
            obj.calculate();
            System.out.println();
            System.out.println("Матрица системы");

            obj.showMatrix("matrixOfSystem");

            System.out.println("\nСтолбец свободных членов");

            obj.showMatrix("B");

            System.out.print("\nОпределитель матрицы системы равен "+obj.getDeterminantMatrixOfSystem()+"\n");
            System.out.print("\nМатрица, обратная к матрице системы");
            obj.inverseMatrix();

            obj.showMatrix("inverseMatrix");

            System.out.print("\nПроверка обратной матрицы");
            obj.setCheckInverseMatrix();

            obj.showMatrix("checkInverseMatrix");

            System.out.println("Ответ");

            obj.showMatrix("answer");

            System.out.println("Ответ(метод Крамера)");
            obj.methodCramers();

            obj.showMatrix("answerCramers");

            System.out.println();
            System.out.println("Проверка");
            obj.check();

            obj.showMatrix("B1");

            System.out.println("\nнорма 1 матрицы системы (максимальная сумма по столбцам) = "+obj.getNormOneMatrixOfSystem());
            System.out.println("норма 2 матрицы системы (корень суммы квадратов элементов) = "+obj.getNormTwoMatrixOfSystem());
            System.out.println("норма C матрицы системы (максимальная сумма по строкам) = "+obj.getNormCMatrixOfSystem());

            System.out.println("\nнорма 1 обратной матрицы (максимальная сумма по столбцам) = "+obj.getNormOneInverseMatrixOfSystem());
            System.out.println("норма 2 обратной матрицы (корень суммы квадратов элементов) = "+obj.getNormTwoInverseMatrixOfSystem());
            System.out.println("норма C обратной матрицы (максимальная сумма по строкам) = "+obj.getNormCInverseMatrixOfSystem());

            obj.setNumberConditionMatrixOfSystem();

            System.out.println("\nчисло обусловленности 1 = "+obj.getConditionNumberOne());
            System.out.println("число обусловленности 2 = "+obj.getConditionNumberTwo());
            System.out.println("число обусловленности С = "+obj.getConditionNumberThree());
        }
    }
}
